package com.qf.juc;

import java.util.Random;
import java.util.concurrent.CountDownLatch;

/**
 *
 * 案例：6个同学陆续离开教室后值班同学才可以关门。
 *
 *    6 5 4 3 2 1  关门   闭锁
 *
 *    多线程的思路：
 *       1、6个同学  代表是6个线程
 *       2、值班同学 代表也是一个线程
 *       共七个线程
 *
 *
 * @author lixu
 */
public class CountDownLatchDemo {




    public static void main(String[] args) throws Exception {
        //闭锁   构造器 ： 闭锁锁住多少个人 代码： 锁住多少个线程
        CountDownLatch countDownLatch = new CountDownLatch(6);//6名同学
        //主线程是值班同学

        //6个同学  6个子线程
        for (int i = 1; i <= 6; i++) {
            new Thread(() -> {//子线程   是异步的关系
                try {
                    Thread.sleep(new Random().nextInt(300));
                    //同学们在班级逗留的时间  不固定
                    System.out.println(Thread.currentThread().getName() + ":离开了教室");
                    //记录同学已经走了
                   countDownLatch.countDown();//记录 6-1=5-1=4-1=3-1=2-1=1-1=0
                } catch (Exception e) {
                    e.printStackTrace();
                }
            },String.valueOf(i)).start();
        }

        countDownLatch.await();//闭锁改为开锁
        System.out.println("值班同学可以关门了");





    }



}





